/* Code adapted from Atmel AVR Application Note AVR306
 * Polled mode driver for UART, this is the similar to the
 * library default putchar() and getchar() in ICCAVR
 */
#include <iom8v.h>
#include <macros.h>
#include "uart.h"

/* initialize UART */
void InitUART( unsigned char baudrate )
	{
	UBRR = baudrate; /* set the baud rate */
	UCR = BIT(RXEN) | BIT(TXEN); /* enable UART receiver and transmitter */
	}

/* Read and write functions */
unsigned char ReceiveByte( void )
	{
	while ( !(USR & (1<<RXC)) ) /* wait for incomming data */
		; /* return the data */
	return UDR;
	}

void TransmitByte( unsigned char data )
	{
	while ( !(USR & (1<<UDRE)) )
		; /* wait for empty transmit buffer */
	UDR = data; /* start transmittion */
	}

#ifdef TEST

/* main - a simple test program*/
void main( void )
	{
	InitUART( 11 ); /* set the baudrate to 19,200 bps using a
					3.6864MHz crystal */
	while ( 1 ) /* forever */
		{
		TransmitByte( ReceiveByte() ); /* echo the received character */
		}
	}
#endif
